/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2023-03-02
 * Time: 11:11
 */

public class Liskov {
    public static void main(String[] args) {
        //调用代码的时候
        A a = new A();
        System.out.println("11-3= " + a.func1(11,3));
        System.out.println("1-8= " + a.func1(1,8));


        System.out.println("---------------------");
        B b = new B();
        //程序员的本意是 以为调用的是A中的func1方法 执行的是 11-3
        //但是实际上 不小心重写了 func1方法 那么就不会执行父类的了

        System.out.println("11-3=" + b.func1(11,3));

    }
}

//里氏替换原则
class A{
    //返回两个数相减的数
    public int func1(int num1,int num2){
        return num1-num2;
    }
}

//创建一个B类 继承A类
class B extends A{
    //但是 无意间将func1重写了
    //重写了 可能是无意识的 (相当然的认为还是调用A类的方法)
    public int func1(int a,int b){
        return a+b;
    }

    //B类有自己的方法 本意只是增加一个方法 求和+9
    public int func2(int a,int b){
        return a+b+9;
    }
}

//解决方法 原来正常运行的相减的功能发生了错误 原因是B类无意间重写了父类的方法，造成原有功能出现错误
// 在实际编程中 我们常常会重写父类的方法 来完善新的功能 这样虽然简单 但是整个继承体系的复用性较差
//特别是运行多态比较频繁的时候

// 通过的做法是 原来父类 和 子类都是继承一个更通俗的基类 原有的继承关系去掉 采用依赖 聚合 组合等关系代替